package TarryDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import TarryDTOS.TarryItemPedidoDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Mauricio Alan
 */
public class TarryItemsPedidoDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public TarryItemsPedidoDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ DETERMINA LA SUMA TOTAL DE TODOS SUS ITEMS
     *
     * @param idPedido
     * @return
     */
    public double totalItemsPedido(int idPedido) {
        double suma = 0.0;
        db.openDatabase();
        String query = "SELECT SUM(items_pedido.total_item) as totalItem FROM items_pedido where id_pedido= " +idPedido;
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                suma = rst.getDouble("totalItem");
            } else {
                suma = 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryItemsPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return suma;
    }

    /**
     * ALAN GONZALEZ NUEVO REGISTRO DE UN ITEM DE PEDIDO CON CALCULOS
     * AUTOMATIZADOS DESDE EL CATALOGO PRODUCTOS
     *
     * @param item
     */
    public void agregarItemPedido(TarryItemPedidoDTO item) {
        db.openDatabase();
        String query = "INSERT INTO items_pedido SET";
        query += " items_pedido.id_pedido =" + item.getIdPedido() + ",";
        query += " items_pedido.id_producto =" + item.getIdProducto() + ",";
        query += " items_pedido.cantidad_unidades = " + item.getCantidadUnidad() + ", ";
        query += " items_pedido.precio_asigando_unidad =" + item.getPrecioAsignadoUnidad() + ",";
        query += " items_pedido.subtotal_unidades = (items_pedido.cantidad_unidades * items_pedido.precio_asigando_unidad ), ";
        query += " items_pedido.cantidad_corrugados = " + item.getCantidadCorrugados() + ",";
        query += " items_pedido.precio_asigando_corrugado = " + item.getPrecionAsignadoCorrugado() + ",";
        query += " items_pedido.subtotal_corrugados = (items_pedido.cantidad_corrugados * items_pedido.precio_asigando_corrugado),";
        query += " items_pedido.descuento_asignado = " + item.getDescuentoItem() + ",";
        if (item.getDescuentoItem() == 0) {
            query += " items_pedido.total_item = (items_pedido.subtotal_unidades + items_pedido.subtotal_corrugados);";
        } else if (item.getDescuentoItem() > 0) {
            query += " items_pedido.total_item = (items_pedido.subtotal_unidades + items_pedido.subtotal_corrugados) - (((items_pedido.subtotal_unidades + items_pedido.subtotal_corrugados) * items_pedido.descuento_asignado)/100);";
        }
        db.execute(query);
        db.closeDatabase();
        // ACTUALIZACION DEL PEDIDO
        TarryPedidosDAO pedidosDAO = new TarryPedidosDAO();
        pedidosDAO.actualizarSubtotal(item.getIdPedido(), this.totalItemsPedido(item.getIdPedido()));
        // ACTUALIZACION DEL PEDIDO
    }

    /**
     * ALAN GONZALEZ ELIMINA ITEM DE PEDIDO
     * @param idPedido
     * @param idReg
     */
    public void eliminarItemPedido(int idPedido, int idReg) {
        db.openDatabase();
        String query = "DELETE FROM items_pedido where items_pedido.id=" + idReg;
        db.execute(query);
        db.closeDatabase();
        // ACTUALIZACION DEL PEDIDO
        TarryPedidosDAO pedidosDAO = new TarryPedidosDAO();
        pedidosDAO.actualizarSubtotal(idPedido, this.totalItemsPedido(idPedido));
        // ACTUALIZACION DEL PEDIDO
    }

    /**
     * ALAN GONZALEZ 
     * SELECCIONA TODOS LOS ITEMS PRODUCTO DE UN ID DE PEDIDO
     * @param idPedido
     * @return
     */
    public Vector itemsPorPedido(int idPedido) {
        Vector itms = new Vector();
        String query = "SELECT * from items_pedido where items_pedido.id_pedido = " + idPedido;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                TarryItemPedidoDTO t = new TarryItemPedidoDTO();
                t = res.tarryItemPedidoDTO(rst);
                itms.add(t);
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryItemsPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return itms;
    }

    /**
     * ALAN GONZALEZ SUMA TOTAL DE LOS ITEMS AGREGADOS EN UN PEDIDO
     *
     * @param idPedido
     * @return
     */
    public double totalItems(int idPedido) {
        double suma = 0.0;
        db.openDatabase();
        String query = "SELECT SUM(items_pedido.total_item) AS suma FROM items_pedido WHERE id_pedido= " + idPedido;
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                suma = rst.getDouble("suma");
            } else {
                suma = 0.0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryItemsPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return suma;
    }

    /**
     * ALAN GONZALEZ ELIMINA TODOS LOS ITEMS DE UN PEDIDO
     *
     * @param idPedido
     */
    public void eliminarTodosItemsPedido(int idPedido) {
        db.openDatabase();
        String query = "DELETE FROM items_pedido WHERE items_pedido.id_pedido=" + idPedido;
        db.execute(query);
        db.closeDatabase();
    }

}
